home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / gnulib / sipp / srgp / src / srgp_ras.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-01  |  3.5 KB  |  102 lines

  1. #include "HEADERS.h"
  2. #include "srgplocal.h"
  3.  
  4. #ifdef THINK_C
  5. #include "ChooseWhichQuickdraw.h"
  6. #endif
  7.  
  8. #define DFIXED(yy)\
  9. (srgp__curActiveCanvasSpec.max_ycoord - (yy))
  10. #define SFIXED(yy)\
  11. (srgp__canvasTable[source_canvas_id].max_ycoord - (yy))
  12.  
  13.  
  14. void
  15. SRGP_copyPixel (canvasID source_canvas_id,
  16.                 rectangle source_rect,
  17.                 point dest_corner)
  18. {
  19.    register int height;
  20.  
  21.    DEBUG_AIDS{
  22.       SRGP_trace (SRGP_logStream, "SRGP_copyPixel: %d (%d,%d)->(%d,%d) -----> (%d,%d)\n",
  23.                   source_canvas_id, ExplodeRect(source_rect), ExplodePt(dest_corner));
  24.       srgp_check_system_state();
  25.       srgp_check_extant_canvas (source_canvas_id);
  26.       srgp_check_rectangle
  27.          (source_rect.bottom_left.x, source_rect.bottom_left.y,
  28.           source_rect.top_right.x, source_rect.top_right.y);
  29.       LeaveIfNonFatalErr();
  30.    }
  31.  
  32.  
  33. #ifdef X11
  34.    height = (source_rect.top_right.y - source_rect.bottom_left.y + 1);
  35.    XCopyArea (srgpx__display,
  36.               srgp__canvasTable[source_canvas_id].drawable.bitmap,
  37.               srgp__curActiveCanvasSpec.drawable.bitmap,
  38.               srgp__curActiveCanvasSpec.gc_fill,
  39.               source_rect.bottom_left.x, SFIXED(source_rect.top_right.y),
  40.               (source_rect.top_right.x - source_rect.bottom_left.x + 1),
  41.               height,
  42.               dest_corner.x, DFIXED(dest_corner.y + height - 1));
  43. #endif
  44.  
  45. #ifdef THINK_C
  46. {
  47.    Rect sRect, dRect;
  48.    int modeTable[] = {srcCopy, srcXor, srcOr, notSrcBic};
  49. #ifdef COLOR_QUICKDRAW
  50.    CGrafPtr curcgport = (CGrafPtr)thePort;
  51.    long savefgcolor, savebgcolor;
  52. #endif
  53.  
  54.  
  55.    SetRect (&sRect, source_rect.bottom_left.x, SFIXED(source_rect.top_right.y),
  56.            source_rect.top_right.x+1, SFIXED(source_rect.bottom_left.y) + 1);
  57.    SetRect(&dRect,
  58.            dest_corner.x,
  59.            DFIXED(dest_corner.y + source_rect.top_right.y - source_rect.bottom_left.y),
  60.            dest_corner.x + source_rect.top_right.x - source_rect.bottom_left.x + 1,
  61.            DFIXED(dest_corner.y) + 1);
  62.  
  63. #ifdef COLOR_QUICKDRAW
  64.    savefgcolor = thePort->fgColor; savebgcolor = thePort->bkColor;
  65.    thePort->fgColor = 255;  thePort->bkColor = 0;  /*THIS IS DANGEROUSLY STUPID*/
  66.  
  67. #  define canvasGrafport(i) (*((CGrafPtr)(srgp__canvasTable[i].drawable.xid)))
  68.    CopyBits (*(canvasGrafport(source_canvas_id).portPixMap),
  69.              *(canvasGrafport(srgp__curActiveCanvasId).portPixMap),
  70.                      &sRect, &dRect,
  71.                      modeTable[srgp__curActiveCanvasSpec.attributes.write_mode], NULL);
  72.  
  73.    thePort->fgColor = savefgcolor;  thePort->bkColor = savebgcolor;
  74. #else
  75. #  define canvasGrafport(i) (*((GrafPtr)(srgp__canvasTable[i].drawable.xid)))
  76.    CopyBits (&(canvasGrafport(source_canvas_id).portBits),
  77.              &(canvasGrafport(srgp__curActiveCanvasId).portBits),
  78.                      &sRect, &dRect,
  79.                      modeTable[srgp__curActiveCanvasSpec.attributes.write_mode], NULL);
  80.  
  81. #endif
  82. }
  83. #endif
  84.  
  85. #ifdef GRX
  86.    {
  87.         static int mode_table[4] = { GrWRITE, GrXOR, GrOR, GrAND };
  88.  
  89.         height = (source_rect.top_right.y - source_rect.bottom_left.y + 1);
  90.         GrBitBlt(NULL,
  91.             dest_corner.x,DFIXED(dest_corner.y + height - 1),
  92.             &srgp__canvasTable[source_canvas_id].grx_canvas,
  93.             source_rect.bottom_left.x,SFIXED(source_rect.top_right.y),
  94.             source_rect.top_right.x,SFIXED(source_rect.bottom_left.y),
  95.             mode_table[srgp__curActiveCanvasSpec.attributes.write_mode]
  96.         );
  97.    }
  98. #endif
  99.  
  100. }
  101.  
  102.